const str: string = "sfsf";
console.log(str);
// 11 种基础类型
/* 
1. string 与 String, 
2. number与Number
3. boolean 与 Boolean
4. tuple  元组
5. 数组
6. 对象, 只能 {},[], function 
7. any
8. null 和 undefined
9. void
10. never ， 是任何类型的子类型， 可以赋给任意类型
> 永远达不到的情况有三种 1） 错误  2） 死循环  3） 类型判断时出现never 4) 完整性保护
11. Symbol 与 BigInt

2. 种演变的类型
-- 1. 联合类型 
-- 2. 枚举类型
> 常量枚举    
> 异构枚举
3.类型断言
-- as  不能断言成不存在的属性，避免使用双重断言变成 any ,会破坏原有类型
    (tt as any) as XX
-- ! 非空断言
 */

// Symbol   
let s1 = Symbol('123');
let s2 = Symbol('123');
let obj = {
    [s1]: 'xxx' 
}
// 类型“symbol”不能作为索引类型使用。 obj[s1]
// console.log(s1 === s2);  // false

// BigInt  js原生类型， 指的是大于 2^53-1的整数
// 大到忽略不计
let num1 = Number.MAX_SAFE_INTEGER + 1
let num2 = Number.MAX_SAFE_INTEGER + 2
// console.log(num1 === num2); // true

// BigInt 只能与 BigInt 操作
let num3 = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1)
let num4 = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(2)
let num5 = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1)
console.log(num3 === num4); // false
console.log(num3 === num5); // true


// 默认全局下就有的类型需要增加 export { } 避免冲突


//------------never---------------------
// never 是 任意类型的子类型，可以赋值给任意类型
let a: string = '232'
function bb(): never {
    throw new Error('')
}
let b = bb() // never 
a = b




export { }